import router from "@/router";
import storage from "@/api/storage";
import store from './../store/index'


// 引入nprogress插件
import NProgress from 'nprogress' 
import 'nprogress/nprogress.css'

// 判断本地是否有token，如果有，判断是否有用户菜单
router.beforeEach((to,from,next)=>{
    // 进度条动画打开
    NProgress.start()

    let token = storage.get('qf-token')
    if(token){
        // 在跳转前，要判断是否有用户菜单
        if(!store.state.permission.userMenu.length){
            // 如果没有，发起请求，获取对应权限的角色菜单
            store.dispatch('permission/FETCH_MENU_LIST')
            .then(()=>{
                // 这里的next里面要传的参数是即将要进入的页面的路由信息
                // 因为next传参后，当前要进入的路由会被废止，转而进入参数
                // 对应的路由，虽然是同一个路由。这样做主要是为了确保addRoute
                // 生效了，并且不会产生历史记录
                next({path:to.path,replace:true})
            })
        }  else{
            // 如果有用户菜单，直接跳转
            next()
        }
    }else{
        // 没有token
        // 1.访问的是登入页
        if(to.path === '/login'){
            next()
        }else{
            // 访问的不是登入页，强行跳回登录页
            next({path:'/login'})
           
        }
    }
})


// 全局后置钩子，进入了路由组件之后才回调
router.afterEach((to,from) => {
    // 进度条动画关闭
    NProgress.done()



    // console.log(to.matched);
    // to里面有个属性叫做matched，这里能够获取到匹配成功的路由对象
    // 因为第0项匹配的是空字符串路径，我们不需要，所以要进行处理
    let matched = to.matched.filter(item => item.path)
    // console.log(matched);
    // 当进入路由组件后，调用设置面包屑方法
    store.commit('permission/SET_CRUMB',matched)
})


export default router